﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once

#include "GcmpModelInterface.h"
#include "IExternalData.h"
#include "DbDataSchema.h"

namespace gcmp
{
    class IDocument;

    /// \brief 通用类型对象接口
    class GCMP_MODEL_INTERFACE_EXPORT IRevisionCloudType : public IExternalData
    {
        DECLARE_CLASS_WITHOUT_DATA_MEMBERS(gcmp,IRevisionCloudType, gcmp::IExternalData, C60CC6B1 - 2E6C - 46DB - AEDB - 6E4E46014177 , gcmpmodelinterface)
    public:

        /// \brief 创建通用类型对象
        /// \param pDocument 所属文档
        /// \param typeName 类型名
        /// \return 通用类别指针
        static IRevisionCloudType* Create(IDocument* pDocument, const std::wstring& typeName);
        static const IRevisionCloudType* GetType(IDocument* pDoc, ElementId typeId);
        static IRevisionCloudType* GetTypeFW(IDocument* pDoc, ElementId typeId);

        GCMP_DEPRECATED_API(2023 / 3 / 30) static std::wstring GetDefalutExternalDataName();

        /// \brief 设置云线的线样式
        ///
        /// \param styleId 云线的线样式
        /// \return 返回true表示成功，false表示失败
        virtual bool SetRevCloudLineStyle(const ElementId& styleId) = 0;

        /// \brief 获取云线的线样式
        ///
        /// \return 返回云线的线样式
        virtual ElementId GetRevCloudLineStyle()const = 0;

        /// \brief 设置云线的引线的线样式
        ///
        /// \param styleId 云线的引线的线样式
        /// \return 返回true表示成功，false表示失败
        virtual bool SetLeadWireStyle(const ElementId& styleId) = 0;

        /// \brief 获取云线的引线的线样式
        ///
        /// \return 返回云线的引线的线样式
        virtual ElementId GetLeadWireStyle() const = 0;

        /// \brief 设置云线的注释字体样式
        ///
        /// \param styleId 云线的注释字体样式
        /// \return 返回true表示成功，false表示失败
        virtual bool SetAnnotationStyle(const ElementId& styleId) = 0;

        /// \brief 获取云线的引线的线样式
        ///
        /// \return 返回云线的引线的线样式
        virtual ElementId GetAnnotationStyle() const = 0;

        /// \brief 设置云线的版本的字体样式
        ///
        /// \param styleId 云线的版本的字体样式
        /// \return 返回true表示成功，false表示失败
        virtual bool SetVersionStyle(const ElementId& styleId) = 0;

        /// \brief 获取云线的版本的字体样式
        ///
        /// \return 返回云线的版本的字体样式
        virtual ElementId GetVersionStyle() const = 0;

        /// \brief 设置字体标注的字体名和字体高
        /// \param[in]    double CharHeight
        /// \param[in]    const std::wstring& FontName
        virtual void SetAnnotationTextStyle(double CharHeight, const std::wstring& FontName) = 0;
        
        /// \brief 获取字体标注的字体高
        /// \return       double
        virtual double GetAnnotataionTextCharHeight() const =0;
        
        /// \brief 获取字体标高的字体名
        /// \return       std::wstring
        virtual std::wstring GetAnnotationTextFontName() const =0;

        /// \brief 设置版本标记的字体名和字体高
        /// \param[in]    double CharHeight
        /// \param[in]    const std::wstring& FontName
        virtual void SetVersionTextStyle(double CharHeight, const std::wstring& FontName) = 0;

        /// \brief 获取版本标记的字体高
        /// \return       double
        virtual double GetVersionTextCharHeight() const =0;

        /// \brief 获取版本标记的字体名
        /// \return       std::wstring
        virtual std::wstring GetVersionTextFontName() const =0;

    };
}
